﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using MySql.Data.MySqlClient;
using Mx.Ipn.Escom.TT20080015.Modelo.Datos;

namespace Mx.Ipn.Escom.TT20080015.Modelo.DB
{
    public class EspecialistaManager : ConexionMySql
    {
        /// <summary>
        /// Este método hace la llamada al procedimiento que registra al Especialista.
        /// </summary>
        /// <param name="e">Objeto Especialista</param>
        public static void Registrar(Usuario e)
        {
            MySqlCommand command = getcommand();
            command.CommandText = "CALL registrar_especialista" + e.ToString();

            /*try
            {*/
                command.Connection.Open();
                command.ExecuteNonQuery();
            /*}
            finally
            {*/
                command.Connection.Close();
            //}
        }

        /// <summary>
        /// Método que realiza una consulta, a través de un procedimiento, del especialista o los especialistas de un hospital.
        /// </summary>
        /// <param name="hospital">Parámetro que describe el Hospital al que pertenece el Especialista(s) que se va a consultar.</param>
        /// <param name="nombre">Parámetro que describe el Nombre del Especialista(s) que se va a consultar.</param>
        /// <returns>Dataset con los datos del especialista(s) consultado.</returns>
        public static DataSet ObtenerEspecialistas(string nombre)
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL consultar_especialistas(?nombre)";
            command.Parameters.Add("?nombre", nombre);

            command.Connection.Open();
            command.Prepare();
            command.ExecuteScalar();
            command.Connection.Close();


            MySqlDataAdapter da = new MySqlDataAdapter(command);
            DataSet ds = new DataSet();
            da.Fill(ds, "especialista");
            da.Fill(ds);

            return ds;
        }

        /// <summary>
        /// Método que ejecuta el procedimiento para consultar un Especialista en la base de datos.
        /// </summary>
        /// <param name="id">Identificador del especialista que se va a consultar.</param>
        /// <returns>Objeto Especialista que contiene los datos del especialista consultado por su id</returns>
        public static Usuario Consultar(int id)
        {
            MySqlCommand command = getcommand();

            Usuario especialista;
            command.CommandText = "CALL consultar_especialista_por_id(?value)";
            command.Parameters.Add("?value", id);
            
            command.Connection.Open();
            MySqlDataReader rd = command.ExecuteReader();
            if (rd.Read())
            {
                especialista = new Usuario(id, rd.GetString(1), rd.GetString(2), 
                    rd.GetString(3), rd.GetString(4), rd.GetString(5), rd.GetString(6), 
                    rd.GetString(7));
            }
            else
                especialista = new Usuario();
            command.Connection.Close();

            return especialista;
        }

        /// <summary>
        /// Método que ejecuta el procedimiento para consultar un Especialista en la base de datos.
        /// </summary>
        /// <param name="login">Nick del usuario que se va a consultar.</param>
        /// <returns>Objeto Especialista que contiene los datos del especialista consultado por su id</returns>
        public static int Consultar(string login)
        {
            int res = -1;
            MySqlCommand command = getcommand();

            command.CommandText = "CALL consultar_especialista_por_login(?value)";
            command.Parameters.Add("?value", login);

            try
            {
                command.Connection.Open();
                MySqlDataReader rd = command.ExecuteReader();
                if (rd.Read())
                {
                    res = rd.GetInt32(0);
                }
            }
            finally
            {
                command.Connection.Close();
            }

            return res;
        }

        /// <summary>
        /// Este método se encarga de guardar en la base de datos las modificaciones hechas al Especialista.
        /// </summary>
        /// <param name="e">Objeto Especialista modificado.</param>
        public static void Actualizar(Usuario e)
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL modificar_especialista" + e.ToString();
            command.Connection.Open();
            command.ExecuteNonQuery();
            command.Connection.Close();
        }

        /// <summary>
        /// Este método llama al procedimiento que elimina de la base de datos al Especialista con id.
        /// </summary>
        /// <param name="id">Identificador del Especialista que se va a eliminar.</param>
        public static void Eliminar(string id)
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL eliminar_especialista(?value)";
            command.Parameters.Add("?value", id);

            command.Connection.Open();
            command.Prepare();
            command.ExecuteScalar();
            command.Connection.Close();
        }
    }
}
